/*
 * @lc app=leetcode.cn id=224 lang=cpp
 *
 * [224] 基本计算器
 */

// @lc code=start
class Solution {
public:
    int calculate(string s) {
        int res = 0;
        int sign = 1;
        int n = s.size();
        stack<int> sta;
        for(int i = 0 ; i < n ; i++)
        {
            int num = 0;

            // 如果查询到了数字，那么将数字进行补全
            if(s[i] >= '0')
            {
                while(i<n && s[i]>='0')
                {
                    num = num*10 + (s[i] - '0');
                    i++;
                }
                i--;
                res += sign*num;
            }

            // 判断“+”
            if(s[i] == '+')
            {
                sign = 1;
            }

            // 判断“-”
            if(s[i] == '-')
            {
                sign = -1;
            }

            // 判断“（”
            if(s[i] == '(')
            {
                sta.push(res);
                sta.push(sign);
                res = 0;
                sign = 1;
            }

            // 判断 “）”
            if(s[i] == ')')
            {
                res *= sta.top();
                sta.pop();
                res += sta.top();
                sta.pop();
            }

        }
        return res;
    }
};
// @lc code=end

